Не вздумайте пользовать fast_trigonometric из glm - там точность слишком плохая, сфера не получается func_trigonometric.hpp - ваш выбор Это отменит, рисование задней стороны треугольника glCullFace(GL_BACK); glEnable(GL_CULL_FACE); указывая координаты на текстуре, их нужно указывать на квадрате 1 на 1, потом фрагментный шейдер сам растянет координаты на всё изображение. вставика в самом начале в инициализацию glEnable(GL_DEPTH_TEST); включит фильтр глубины #include подключит всё, что есть в glm Это всё есть и в шейдере и в glm: cross - векторное произведение dot - скалярное произведение normalize - нормирует вектор length - длинна вектора pow - возведение в степень на перебивание информации тратиться время, поэтому вот для желающих 0 - это солнце, 10 - это небесная сфера radius_[0] = 695990; radius_[1] = 2439.7; radius_[2] = 6051.8; radius_[3] = 6371; radius_[4] = 3389.5; radius_[5] = 69911; radius_[6] = 57316; radius_[7] = 25266; radius_[8] = 24552.5; radius_[9] = 1195; mass_[0] = 1.99E+30; mass_[1] = 3.33E+23; mass_[2] = 4.87E+24; mass_[3] = 5.97E+24; mass_[4] = 6.42E+23; mass_[5] = 1.90E+27; mass_[6] = 5.68E+26; mass_[7] = 8.68E+25; mass_[8] = 1.02E+26; mass_[9] = 1.30E+22; position_[0] = vec3 (9.166368072918009E+04, -3.587908596635106E+05, -1.263365847270218E+04); position_[1] = vec3 (3.981532574646779E+07, 2.693705871595619E+07, -1.427017526993466E+06); position_[2] = vec3 (1.083995110582697E+08, -7.516123504840386E+06, -6.361445678009944E+06); position_[3] = vec3 (1.162398804913440E+08, 9.214935380493926E+07, -1.560961036842257E+04); position_[4] = vec3 (-1.528793878916806E+08, 1.925541334868633E+08, 7.784109759604024E+06); position_[5] = vec3 (-1.308404872563110E+08, 7.618480179221750E+08, -2.483656477704518E+05); position_[6] = vec3 (-1.062988073620396E+09, -1.022591702447227E+09, 6.008502801056857E+07); position_[7] = vec3 (2.946083841697208E+09, 5.529078700946414E+08, -3.611419689746372E+07); position_[8] = vec3 (4.036568780165731E+09, -1.954926579794473E+09, -5.276881058283679E+07); position_[9] = vec3 (9.074663629135412E+08, -4.775885697847751E+09, 2.485565548180889E+08); speed_[0] = vec3 (1.068407615399651E-02, 2.825998901862247E-03, -2.451813399270692E-04); speed_[1] = vec3 (-3.712878513620788E+01, 4.226944115449314E+01, 6.860766793768278E+00); speed_[2] = vec3 (2.163430099495670E+00, 3.478693145745870E+01, 3.521473884663605E-01); speed_[3] = vec3 (-1.903255921308336E+01, 2.319272201812972E+01, -9.394261929108316E-04); speed_[4] = vec3 (-1.805947412894641E+01, -1.298811643007845E+01, 1.711362049767525E-01); speed_[5] = vec3 (-1.303624071468951E+01, -1.591321557884244E+00, 2.983270239243695E-01); speed_[6] = vec3 (6.170956639472989E+00, -6.985778300302598E+00, -1.241099702155237E-01); speed_[7] = vec3 (-1.305921743797635E+00, 6.375718119862134E+00, 4.060658963891937E-02); speed_[8] = vec3 (2.332992134044233E+00, 4.924012112924557E+00, -1.551671101516667E-01); speed_[9] = vec3 (5.444809029005323E+00, -8.040967446408351E-02, -1.566356777898360E+00); Возможные цвета планет color_[0] = vec4 (255, 255, 0, 1); color_[1] = vec4 (137, 132, 138, 1); color_[2] = vec4 (254, 215, 136, 1); color_[3] = vec4 (100, 132, 85, 1); color_[4] = vec4 (229, 129, 67, 1); color_[5] = vec4 (239, 239, 185, 1); color_[6] = vec4 (223, 168, 88, 1); color_[7] = vec4 (190, 254, 254, 1); color_[8] = vec4 (78, 104, 181, 1); color_[9] = vec4 (242, 235, 225, 1); цвет в шейдере задаётся в системе rgb, но там интервал не 0..255, а 0..1 тут все углы в градусах N_[1] = 48.33167; N_[2] = 76.67069; N_[3] = 348.73936; N_[4] = 49.57854; N_[5] = 100.55615; N_[6] = 113.642; N_[7] = 73.989821; N_[8] = 131.79431; N_[9] = 110.30347; N_[10] = ; i_[0] = ; i_[1] = 7; i_[2] = 3.39458; i_[3] = 0; i_[4] = 1.85061; i_[5] = 1.03; i_[6] = 2.485; i_[7] = 0.773; i_[8] = 1.767975; i_[9] = 17.14175; i_[10] = ; w_[0] = 0; w_[1] = 29.124279; w_[2] = 55.186; w_[3] = 114.20783; w_[4] = 286.537; w_[5] = 275.066; w_[6] = 336.013862; w_[7] = 96.541318; w_[8] = 265.646853; w_[9] = 113.76349; w_[10] = 0; a_[0] = ; a_[1] = 57909068; a_[2] = 108208930; a_[3] = 149598261; a_[4] = 227943820; a_[5] = 778547200; a_[6] = 1433449370; a_[7] = 2876679082; a_[8] = 4503443661; a_[9] = 5906376272; a_[10] = ; e_[0] = ; e_[1] = 0.20563069; e_[2] = 0.0068; e_[3] = 0.01671123; e_[4] = 0.0933941; e_[5] = 0.048775; e_[6] = 0.055723; e_[7] = 0.044406; e_[8] = 0.011214; e_[9] = 0.24880766; e_[10] = ; M0_[0] = ; M0_[1] = 174.795884; M0_[2] = 50.115; M0_[3] = 357.51716; M0_[4] = 19.3564; M0_[5] = 18.818; M0_[6] = 320.346750; M0_[7] = 142.955717; M0_[8] = 267.767281; M0_[9] = 14.86012204; M0_[10] = ; все данные - из их таблицы, аномалии - из википедии axis_rotation_[0] = 25.38; axis_rotation_[1] = 58.646; axis_rotation_[2] = 243.023; axis_rotation_[3] = 0.99726968; axis_rotation_[4] = 1.029; axis_rotation_[5] = 0.4147; axis_rotation_[6] = 0.4416; axis_rotation_[7] = 0.71833; axis_rotation_[8] = 0.6653; axis_rotation_[9] = 6.38723; axis_rotation_[10] = 0; rotation_speed_[0] = 0; rotation_speed_[1] = 87.969; rotation_speed_[2] = 224.698; rotation_speed_[3] = 365.256366; rotation_speed_[4] = 686.98; rotation_speed_[5] = 4332.589; rotation_speed_[6] = 10759.22; rotation_speed_[7] = 30685.4; rotation_speed_[8] = 60190.03; rotation_speed_[9] = 90613.3; rotation_speed_[10] = 0; тут rotation_speed_ - это вращение по орбите в днях axis - вокруг своей оси - тоже в днях Более менее правильный способ сделать текстурки нормально - нужно добавить строки вместо аналогичных в каркасе, где инициализируется структурка glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR /*GL_NEAREST*/); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_WRAP_BORDER /*GL_CLAMP*/); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_WRAP_BORDER /*GL_CLAMP*/); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 16); glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST); glGenerateMipmap(GL_TEXTURE_2D); Последнее включает mipmap Эта парочка может включить для вас прозрачность glEnable (GL_BLEND); glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );